const { connectDB, mongoose } = require('../database/db');
const { User } = require('../database/models');

// 创建初始管理员用户
const createAdminUser = async () => {
  try {
    // 检查是否已存在管理员
    const existingAdmin = await User.findOne({ role: 'admin' });
    if (existingAdmin) {
      console.log('✅ 管理员用户已存在:', existingAdmin.phone);
      return existingAdmin;
    }

    // 创建默认管理员
    const adminUser = new User({
      name: '系统管理员',
      phone: '13800138000',
      password: '123456',
      role: 'admin',
      email: 'admin@harmonyos.com',
      address: '系统管理地址'
    });

    await adminUser.save();
    console.log('✅ 管理员用户创建成功');
    console.log('📱 手机号:', adminUser.phone);
    console.log('🔑 密码: 123456');
    
    return adminUser;
  } catch (error) {
    console.error('❌ 创建管理员用户失败:', error.message);
    throw error;
  }
};

// 创建测试维修员用户
const createTestMaintainer = async () => {
  try {
    // 检查是否已存在测试维修员
    const existingMaintainer = await User.findOne({ 
      role: 'maintainer',
      phone: '13800138001'
    });
    
    if (existingMaintainer) {
      console.log('✅ 测试维修员已存在:', existingMaintainer.phone);
      return existingMaintainer;
    }

    // 创建测试维修员
    const maintainerUser = new User({
      name: '李师傅',
      phone: '13800138001',
      password: '123456',
      role: 'maintainer',
      email: 'maintainer@harmonyos.com',
      address: '维修服务区域',
      specialties: ['electrical', 'plumbing', 'hvac'],
      experience: 5,
      rating: 4.8
    });

    await maintainerUser.save();
    console.log('✅ 测试维修员创建成功');
    console.log('📱 手机号:', maintainerUser.phone);
    console.log('🔑 密码: 123456');
    
    return maintainerUser;
  } catch (error) {
    console.error('❌ 创建测试维修员失败:', error.message);
    throw error;
  }
};

// 创建测试用户
const createTestUser = async () => {
  try {
    // 检查是否已存在测试用户
    const existingUser = await User.findOne({ 
      role: 'user',
      phone: '13800138002'
    });
    
    if (existingUser) {
      console.log('✅ 测试用户已存在:', existingUser.phone);
      return existingUser;
    }

    // 创建测试用户
    const testUser = new User({
      name: '张用户',
      phone: '13800138002',
      password: '123456',
      role: 'user',
      email: 'user@harmonyos.com',
      address: '北京市朝阳区测试小区1号楼101室'
    });

    await testUser.save();
    console.log('✅ 测试用户创建成功');
    console.log('📱 手机号:', testUser.phone);
    console.log('🔑 密码: 123456');
    
    return testUser;
  } catch (error) {
    console.error('❌ 创建测试用户失败:', error.message);
    throw error;
  }
};

// 初始化数据库
const initializeDatabase = async () => {
  let retryCount = 0;
  const maxRetries = 3;

  while (retryCount < maxRetries) {
    try {
      console.log('🚀 开始初始化数据库...');
      
      // 连接数据库
      await connectDB();
      
      // 等待连接建立
      await new Promise(resolve => setTimeout(resolve, 2000));
      
      // 检查连接状态
      if (mongoose.connection.readyState !== 1) {
        throw new Error('数据库连接未建立');
      }
      
      console.log('✅ 数据库连接成功');
      
      // 创建初始用户
      await createAdminUser();
      await createTestMaintainer();
      await createTestUser();
      
      console.log('✅ 数据库初始化完成！');
      console.log('\n📋 测试账户信息:');
      console.log('👤 管理员: 13800138000 / 123456');
      console.log('🔧 维修员: 13800138001 / 123456');
      console.log('🏠 用户: 13800138002 / 123456');
      console.log('\n🌟 系统已准备就绪，可以开始使用！');
      
      // 成功则退出循环
      break;
      
    } catch (error) {
      retryCount++;
      console.error(`❌ 数据库初始化失败 (尝试 ${retryCount}/${maxRetries}):`, error.message);
      
      if (retryCount < maxRetries) {
        console.log(`⏳ ${3}秒后重试...`);
        await new Promise(resolve => setTimeout(resolve, 3000));
      } else {
        console.error('❌ 达到最大重试次数，初始化失败');
        console.error('🔍 请检查以下项目:');
        console.error('   1. MongoDB服务是否运行');
        console.error('   2. 网络连接是否正常');
        console.error('   3. 数据库连接字符串是否正确');
        process.exit(1);
      }
    }
  }
  
  // 关闭数据库连接
  try {
    await mongoose.connection.close();
    console.log('🔌 数据库连接已关闭');
  } catch (error) {
    console.log('⚠️ 关闭数据库连接时出现警告:', error.message);
  }
  
  process.exit(0);
};

// 如果直接运行此文件，执行初始化
if (require.main === module) {
  initializeDatabase();
}

module.exports = {
  initializeDatabase,
  createAdminUser,
  createTestMaintainer,
  createTestUser
};